/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vccibernos;

import java.util.*;

/**
 */
public class Cajero {
    /*
     * loginCliente Pregunta por el Nombre de Usuario y el Pin, los concatena con un espacio y lo manda a seleccionaCliente con el
     * indice 6 de modo de operacion, este lo trata y pregunta por el cliente con el nombre de usuario y pin correspondientes. El
     * método devuelve una lista de Clientes, si está vacia es que no existe ningun cliente, si está llena lo estará de un cliente.
     */

    public static void loginCliente() {
        Cliente c = null;
        System.out.println("---Cajero---");
        do {
            String login = ObtenerTeclado.dameCadena("Introduce el Nombre de Usuario: ");
            int pin = ObtenerTeclado.dameEntero("Introduce el Pin: ");
            String s = login + " " + pin;

            c = GestionCliente.obtenerCliente(login,pin);
            if (c == null) {
                System.out.println("¡¡Nombre de Usuario o Pin incorrectos!! Intenta de nuevo..");
            } else {
                menuPrincipal(cliente);
            }
        } while (c == null);
    }
    public static Cliente cliente;

    public static void menuPrincipal(Cliente cliente) {

        Cajero.cliente = cliente;
        int i = 1;

        do {

            System.out.println("1. Alquiler Pelicula o Juego");
            System.out.println("2. Devolucion");
            System.out.println("3. Saldo");
            System.out.println("4. Mostrar promociones");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("introduzca una opcion: ");

            switch (i) {

                case 1:
                    menuAlquiler();
                    break;
                case 2:
                    menuDevolucion();
                    break;
                case 3:
                    menuSaldo();
                    break;
                case 4:
                    menuPromociones();
                    break;
                default:
                    System.out.println("\n Opcion incorrecta. ");
                    break;
            }

        } while (i != 0);

    }

    private static void menuAlquiler() {
        //Creo una lista de alquileres para poder añadir los alquileres
        List<Alquiler> listaAlquileres = new ArrayList();

        int i = 1;
        do {


            System.out.println("1. Buscar pelicula");
            System.out.println("2. Buscar juego");
            System.out.println("3. Mostrar articulos seleccionados");
            System.out.println("4. Eliminar articulo de la lista de alquileres");
            System.out.println("5. Confirmar alquileres");
            System.out.println("6. Mostrar promociones");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 1:
                    submenuBusquedaPelicula(listaAlquileres);
                    break;
                case 2:
                    submenuBusquedaJuego(listaAlquileres);
                    break;
                case 3:
                    //Vamos a recorrer la lista de alquileres para ver los articulos que ha seleccionado
                    GestionAlquiler.mostrarArticulosSeleccionadas(listaAlquileres);
                    break;
                case 4:
                    int codigo = ObtenerTeclado.dameEntero("Introduzca el codigo del articulo a eliminar");
                    GestionAlquiler.EliminarAlquiler(listaAlquileres, codigo);
                    break;
                case 5:
                    GestionAlquiler.confirmar(cliente, listaAlquileres);
                    break;
                case 6:
                    GestionPromociones.mostrarPromocionesVigentes();
                    break;
                default:
                    System.out.println("Opcion incorrecta");
                    break;
            }

        } while (i != 0);
    }

    private static void submenuBusquedaPelicula(List<Alquiler> listaAlquileres) {
        int i = 1;
        do {
            System.out.println("1. Mostrar novedades");
            System.out.println("2. Mostrar peliculas mejor valoradas");
            System.out.println("3. Busqueda por titulo");
            System.out.println("4. Busqueda por genero");
            System.out.println("5. Busqueda por año");
            System.out.println("6. Busqueda por director");
            System.out.println("7. Seleccionar pelicula");
            System.out.println("0. Salir");

            switch (i) {
                case 1:
                    GestionAlquiler.mostrarNovedades();
                    break;
                case 2:
                    GestionAlquiler.mostrarMejores();
                    break;
                case 3:
                    String titulo = ObtenerTeclado.dameCadena("Introduzca el titulo buscado");
                    GestionAlquiler.busquedaTitulo(titulo);
                    break;
                case 4:
                    String genero = ObtenerTeclado.dameCadena("Introduzca el genero buscado");
                    GestionAlquiler.busquedaGenero(genero);
                    break;
                case 5:
                    int anyo = ObtenerTeclado.dameEntero("Introduzca el año buscado");
                    GestionAlquiler.busquedaAnyo(anyo);
                    break;
                case 6:
                    String director = ObtenerTeclado.dameCadena("Introduzca el director buscado");
                    GestionAlquiler.busquedaDirector(director);
                    break;
                case 7:
                    int cod = ObtenerTeclado.dameEntero("Introduzca el codigo de la pelicula seleccionada");
                    GestionAlquiler.AddAlquiler(listaAlquileres, cod);
                    //Salgo del submenu al menu de alquiler de pelicula
                    i = 0;
                    break;
                default:
                    System.out.println("\n Opcion incorrecta. ");
                    break;
            }
        } while (i != 0);

    }

    private static void submenuBusquedaJuego(List<Alquiler> listaAlquileres) {

        int i = 1;
        do {
            System.out.println("1. Mostrar juegos mejor valorados");
            System.out.println("2. Busqueda por titulo");
            System.out.println("3. Busqueda por genero");
            System.out.println("4. Busqueda por soporte");
            System.out.println("5. Seleccionar juego");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 1:
                    GestionAlquiler.mostrarMejores();
                    break;
                case 2:
                    String titulo = ObtenerTeclado.dameCadena("Introduzca el titulo buscado");
                    GestionAlquiler.busquedaJuegoTitulo(titulo);
                    break;
                case 3:
                    String genero = ObtenerTeclado.dameCadena("Introduzca el genero buscado");
                    GestionAlquiler.busquedaJuegoGenero(genero);
                    break;
                case 4:
                    String soporte = ObtenerTeclado.dameCadena("Introduzca la plataforma buscada");
                    GestionAlquiler.busquedaJuegoSoporte(soporte);
                    break;
                case 5:
                    int codigo = ObtenerTeclado.dameEntero("Introduzca el codigo del juego para alquilar");
                    GestionAlquiler.AddAlquiler(listaAlquileres, codigo);
                    break;
                default:
                    System.out.println("Opcion incorrecta");
                    break;
            }

        } while (i != 0);
    }

    private static void menuDevolucion() {
        int i = 1;
        do {
            System.out.println("1. Mostrar peliculas pendientes");
            System.out.println("2. Devolver pelicula seleccionada");
            System.out.println("0. Salir");
            i = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (i) {
                case 1:
                    GestionAlquiler.mostrarAlquileresPendientes(cliente);
                    break;
                case 2:
                    int cod = ObtenerTeclado.dameEntero("Introduzca el codigo del alquiler");
                    GestionAlquiler.devolverArticulo(cliente, cod);
                    float val = ObtenerTeclado.dameFloat("Introduzca la valoracion de la pelicula");
                    GestionAlquiler.valorarPelicula(cod, val);
                    break;
                default:
                    System.out.println("\n Opcion incorrecta. ");
                    break;
            }
        } while (i != 0);
    }

    private static void menuSaldo() {

        int j = 1;
        float saldo;

        do {
            System.out.println("1. Mostrar Saldo");
            System.out.println("2. Recargar Saldo");
            System.out.println("0. Salir");
            j = ObtenerTeclado.dameEntero("Introduzca una opcion");

            switch (j) {
                case 1:
                    GestionSaldo.mostrarSaldo(cliente);
                    break;
                case 2:
                    saldo = ObtenerTeclado.dameFloat("Introduzca cantidad a recargar");
                    GestionMovimientos.addMovimiento(cliente, saldo, "Recarga de saldo");
                    GestionSaldo.recargarSaldo(saldo, cliente);
                default:
                    System.out.println("\n Opcion incorrecta. ");
                    break;
                    
            }
        } while (j != 0);

    }

    public static void menuPromociones() {
        System.out.println("Menu de Promociones:");
        System.out.println("----------------------");
        GestionPromociones.mostrarPromociones();
    }
}
